home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 169_01 / getseg_c.asm < prev    next >
Assembly Source File  |  1983-12-27  |  2KB  |  83 lines

  1.  
  2. ; Name        getseg -- Get current Segment Values
  3. ;
  4. ;
  5. ; Synopsis    getseg(pcs, pds, pes, pss, psi, pdi, psp, pflag);
  6. ;
  7. ;        unsigned *cs Pointer to where code segment address goes
  8. ;        unsigned *ds Pointer to data segment
  9. ;        unsigned *es Pointer to extra segment
  10. ;        unsigned *ss Pointer to stack segment
  11. ;        unsigned *si Pointer to si register
  12. ;        unsigned *di Pointer to di register
  13. ;        unsigned *sp Pointer to sp register
  14. ;        unsigned *flag Returns flag
  15. ;
  16. ;
  17. ; Returns    cs        value of Code segment
  18. ;        ds        value of Data segment
  19. ;        es        value of Extra segment
  20. ;        ss        value of Stack segment
  21. ;        si        value of SI register ****NOT RELIABLE****
  22. ;        di        value of DI register
  23. ;        sp        value of Stack Pointer
  24. ;        flag        value of Flags register
  25. ;
  26. ;
  27. ;
  28.  
  29.  
  30. pgroup    group     prog
  31. prog    segment  byte public 'PROG' ; Combine with C 'PROG' program segment
  32.     assume     cs:pgroup
  33.     public     getseg
  34. getseg proc    near
  35.     push     bp            ; Save the frame pointer
  36.     mov     bp,sp
  37.     mov     si,[bp + 04]        ; Get the values for the registers
  38.     mov     ax,[si]
  39.     mov     si,[bp + 06]
  40.     mov     bx, [si]
  41.     mov     si,[bp + 08]
  42.     mov     cx, [si]
  43.     mov     si,[bp + 10]
  44.     mov     dx,[si]
  45. ;==============================================================
  46.     mov ax, cs            ;Get value of code segment
  47.     mov bx, ds            ;data segment
  48.     mov cx, es            ;extra segment
  49.     mov dx, ss            ;stack segment
  50.  
  51.  
  52. ;==============================================================
  53.  
  54. uret:    mov     bp,sp            ; Now recover the values of the
  55.     mov     si,[bp + 04]        ; parameters
  56.     mov     [si],ax
  57.     mov     si, [bp + 06]
  58.     mov     [si], bx
  59.     mov     si, [bp + 08]
  60.     mov     [si], cx
  61.     mov     si, [bp + 10]
  62.     mov     [si], dx
  63.     mov     si, [bp + 12]
  64.     mov     [si], si
  65.     mov     si, [bp + 14]
  66.     mov     [si], di
  67.     mov     si, [bp + 16]
  68.     mov     [si], sp
  69.     mov     al, 00         ;zero out al
  70.     lahf                ;load flag into ah
  71.     mov     si, [bp + 18]
  72.     mov     [si], ax
  73.  
  74.  
  75.     mov     ax,0            ; No error
  76.  
  77. quit:    pop     bp            ; Get the original frame pointer.
  78.     ret
  79. getseg endp
  80. prog    ends
  81.     end
  82.